home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1992 June: ROMin Holiday / ADC Developer CD (1992-06) (''ROMin Holiday'')_iso / Developer Connection - 06-1992.iso / Development Platforms / Apple II / Essentials / MPW IIGS Interfaces / PIIGSIncludes / TextEdit.p < prev    next >
Encoding:
Text File  |  1990-08-01  |  14.1 KB  |  493 lines  |  [TEXT/MPS ]

  1. {********************************************
  2. ; File: TextEdit.p
  3. ;
  4. ;
  5. ; Copyright Apple Computer, Inc. 1986-90
  6. ; All Rights Reserved
  7. ;
  8. ********************************************}
  9.  
  10. UNIT TEXTEDIT;
  11.  
  12. INTERFACE
  13.  
  14. USES TYPES,QUICKDRAW,EVENTS,FONTS,GSOS,RESOURCES,CONTROLS;
  15.  
  16. CONST
  17. { Error Codes }
  18. teAlreadyStarted = $2201;
  19. teNotStarted = $2202;
  20. teInvalidHandle = $2203;
  21. teInvalidVerb = $2204;
  22. teInvalidFlag = $2205;
  23. teInvalidPCount = $2206;
  24. teInvalidRect = $2207;
  25. teBufferOverflow = $2208;
  26. teInvalidLine = $2209;
  27. teInvalidCall = $220A;
  28.  
  29. { TE Verbs }
  30. NullVerb = $0000;
  31. PStringVerb = $0001;
  32. CStringVerb = $0002;
  33. C1InputVerb = $0003;
  34. C1OutputVerb = $0004;
  35. HandleVerb = $0005;
  36. PointerVerb = $0006;
  37. NewPStringVerb = $0007;
  38. fEqualLineSpacing = $8000;
  39. fShowInvisibles = $4000;
  40. teInvalidDescriptor = $2204;
  41. teInvalidParameter = $220B;
  42. teInvalidTextBox2 = $220C;
  43. teNeedsTools = $220D;
  44. teEqualLineSpacing = $8000;
  45. teShowInvisibles = $4000;
  46.  
  47. { Justification Values }
  48. leftJust = $0000;
  49. rightJust = $FFFF;
  50. centerJust = $0001;
  51. fullJust = $0002;
  52.  
  53. { TERuler.tabType Codes }
  54. noTabs = $0000;
  55. stdTabs = $0001;  { Tabs every tabTerminator pixels }
  56. absTabs = $0002;  { Tabs at absolute location specified by theTabs array }
  57.  
  58. { TEParamBlock.flags Codes }
  59. fCtlInvis = $0080;
  60. fRecordDirty = $0040;
  61.  
  62. { TE Tab Codes }
  63. teLeftTab = $0000;
  64. teCenterTab = $0001;
  65. teRightTab = $0002;
  66. teDecimalTab = $0003;
  67.  
  68. { TEParamBlock.textFlags Codes }
  69. fNotControl = $80000000;  { TextEdit record is not a control }
  70. fSingleFormat = $40000000;  { Only one ruler is allowed for record }
  71. fSingleStyle = $20000000;  { Only one style is allowed for record }
  72. fNoWordWrap = $10000000;  { No word wrap is performed }
  73. fNoScroll = $08000000;  { The text cannot scroll }
  74. fReadOnly = $04000000;  { The text cannot be edited }
  75. fSmartCutPaste = $02000000;  { Record supports intelligent cut and paste }
  76. fTabSwitch = $01000000;  { Tab key switches user to next TextEdit record on the screen }
  77. fDrawBounds = $00800000;  { TextEdit draw a box around text }
  78. fColorHilight = $00400000;  { Use color table for highlighting }
  79. fGrowRuler = $00200000;  { Adjust right margin whenever window size changes }
  80. fDisableSelection = $00100000;  { User cannot select or edit text }
  81. fDrawInactiveSelection = $00080000;  { TextEdit displays a box around an inactive selection }
  82.  
  83. { Descriptor Codes }
  84. teCtlColorIsPtr = $0000;
  85. teCtlColorIsHandle = $0004;
  86. teCtlColorIsResource = $0008;
  87. teCtlStyleIsPtr = $0000;
  88. teCtlStyleIsHandle = $0001;
  89. teCtlStyleIsResource = $0002;
  90. teRefIsPtr = $0000;
  91. teRefIsHandle = $0001;
  92. teRefIsResource = $0002;
  93. teRefIsNewHandle = $0003;
  94. teDataIsPString = $0000;
  95. teDataIsCString = $0001;
  96. teDataIsC1Input = $0002;
  97. teDataIsC1Output = $0003;
  98. teDataIsTextBox2 = $0004;
  99. teDataIsTextBlock = $0005;
  100. teTextIsPtr = $0000;
  101. teTextIsHandle = $0008;
  102. teTextIsResource = $0010;
  103. teTextIsNewHandle = $0018;
  104.  
  105. { TEGetLastError clearFlag Codes }
  106. fLeaveError = $0000;  { Leave the last error code intact }
  107. fClearError = $FFFF;  { Clear the last error code }
  108.  
  109. { Other Constants }
  110. teInvis = $4000;
  111. tePartialLines = $8000;
  112. teDontDraw = $4000;
  113. teUseFont = $0020;
  114. teUseSize = $0010;
  115. teUseForeColor = $0008;
  116. teUseBackColor = $0004;
  117. teUseUserData = $0002;
  118. teUseAttributes = $0001;
  119. teReplaceFont = $0040;
  120. teReplaceSize = $0020;
  121. teReplaceForeColor = $0010;
  122. teReplaceBackColor = $0008;
  123. teReplaceUserField = $0004;
  124. teReplaceAttributes = $0002;
  125. teSwitchAttributes = $0001;
  126.  
  127. { Filter Procedure Commands }
  128. doEraseRect = $0001;
  129. doEraseBuffer = $0002;
  130. doRectChanged = $0003;
  131. doKeyStroke = $0004;
  132.  
  133. { TEScroll descriptors }
  134. teScrollAbsTop = $0000;
  135. teScrollAbsCenter = $0001;
  136. teScrollLineTop = $0002;
  137. teScrollLineCenter = $0003;
  138. teScrollAbsUnit = $0004;
  139. teScrollRelUnit = $0005;
  140.  
  141. TYPE
  142.  
  143. TETextBlockHndl = ^TETextBlockPtr;
  144. TETextBlockPtr = ^TETextBlock;
  145. TETextBlock = RECORD
  146.     nextHandle : TETextBlockHndl; { Handle to next TextBlock in list }
  147.     prevHandle : TETextBlockHndl; { Handle to previous TextBlock in list }
  148.     textLength : Longint; { Number of bytes of theText }
  149.     flags : Integer;
  150.     reserved : Integer; { Reserved }
  151.     theText : PACKED ARRAY[1..1] OF Byte; { textLength bytes of text  }
  152. END;
  153.  
  154. TETextListHndl = ^TETextListPtr;
  155. TETextListPtr = ^TETextList;
  156. TETextList = RECORD
  157.     cachedHandle : TETextBlockHndl; { Handle to current TextBlock }
  158.     cachedOffset : Longint; { Text offset of the start of the current TextBlock }
  159. END;
  160.  
  161. TEColorTableHndl = ^TEColorTablePtr;
  162. TEColorTablePtr = ^TEColorTable;
  163. TEColorTable = RECORD
  164.     contentColor : Integer;
  165.     outlineColor : Integer;
  166.     hiliteForeColor : Integer;
  167.     hiliteBackColor : Integer;
  168.     vertColorDescriptor : Integer;
  169.     vertColorRef : Longint;
  170.     horzColorDescriptor : Integer;
  171.     horzColorRef : Longint;
  172.     growColorDescriptor : Integer;
  173.     growColorRef : Longint;
  174. END;
  175.  
  176. TEBlockEntry = RECORD
  177.     text : Handle;
  178.     length : Handle;
  179.     flags : Integer;
  180. END;
  181.  
  182. TEBlocksHndl = ^TEBlocksPtr;
  183. TEBlocksPtr = ^TEBlocksRecord;
  184. TEBlocksRecord = RECORD
  185.     start : Longint;
  186.     index : Integer;
  187.     blocks : ARRAY[1..1] OF TEBlockEntry;
  188. END;
  189.  
  190. TabItem = RECORD
  191.     tabKind : Integer;
  192.     tabData : Integer;
  193. END;
  194.  
  195. TESuperItemHndl = ^TESuperItemPtr;
  196. TESuperItemPtr = ^TESuperItem;
  197. TESuperItem = RECORD
  198.     itemLength : Longint;
  199.     itemData : Longint;
  200. END;
  201.  
  202. TESuperBlockHndl = ^TESuperBlockPtr;
  203. TESuperBlockPtr = ^TESuperBlock;
  204. TESuperBlock = RECORD
  205.     nextHandle : TESuperBlockHndl;
  206.     prevHandle : TESuperBlockHndl;
  207.     textLength : Longint;
  208.     reserved : Longint;
  209.     theItems : ARRAY[1..1] OF TESuperItem;
  210. END;
  211.  
  212. TESuperHandleHndl = ^TESuperHandlePtr;
  213. TESuperHandlePtr = ^TESuperHandle;
  214. TESuperHandle = RECORD
  215.     cachedHandle : TESuperBlockHndl;
  216.     cachedOffset : Longint;
  217.     cachedIndex : Integer;
  218.     itemsPerBlock : Integer;
  219. END;
  220.  
  221. TERulerHndl = ^TERulerPtr;
  222. TERulerPtr = ^TERuler;
  223. TERuler = RECORD
  224.     leftMargin : Integer;
  225.     leftIndent : Integer;
  226.     rightMargin : Integer;
  227.     just : Integer;
  228.     extraLS : Integer;
  229.     flags : Integer;
  230.     userData : Longint;
  231.     tabType : Integer;
  232.     theTabs : ARRAY[1..1] OF TabItem;
  233.     tabTerminator : Integer;
  234. END;
  235.  
  236. TEStyleHndl = ^TEStylePtr;
  237. TEStylePtr = ^TEStyle;
  238. TEStyle = RECORD
  239.     styleFontID : FontID;
  240.     foreColor : Integer;
  241.     backColor : Integer;
  242.     userData : Longint;
  243. END;
  244.  
  245. TEStyleGroupHndl = ^TEStyleGroupPtr;
  246. TEStyleGroupPtr = ^TEStyleGroup;
  247. TEStyleGroup = RECORD
  248.     count : Integer;
  249.     styles : ARRAY[1..1] OF TEStyle;
  250. END;
  251.  
  252. StyleItemHndl = ^StyleItemPtr;
  253. StyleItemPtr = ^StyleItem;
  254. StyleItem = RECORD
  255.     dataLength : Longint; { Number of text characters using the style }
  256.     dataOffset : Longint; { Byte offset into theStyleList entry }
  257. END;
  258.  
  259. TERulerRef = RECORD CASE INTEGER OF
  260.      teRefIsPtr: (refIsPtr: TERulerPtr);
  261.      teRefIsHandle: (refIsHandle: TERulerHndl);
  262.      teRefIsResource: (refIsResource: ResID);
  263.      teRefIsNewHandle: (refIsNewHandle: ^TERulerHndl);
  264. END;
  265.  
  266.  
  267. {
  268.     The following data structure (TEFormat) is for reference only!
  269.     It contains embedded variable length fields.
  270. }
  271.  
  272. TEFormatHndl = ^TEFormatPtr;
  273. TEFormatPtr = ^TEFormat;
  274. TEFormat = RECORD
  275.     version : Integer;
  276.     rulerListLength : Longint;
  277.     theRulerList : ARRAY[1..1] OF TERuler;
  278.     styleListLength : Longint;
  279.     theStyleList : ARRAY[1..1] OF TEStyle;
  280.     numberOfStyles : Longint;
  281.     theStyles : ARRAY[1..1] OF StyleItem;
  282. END;
  283.  
  284. TETextRef = RECORD CASE INTEGER OF
  285.      $0000:(textIsPStringPtr:StringPtr);
  286.      $0001:(textIsCStringPtr:CStringPtr);
  287.      $0002:(textIsC1InputPtr:GSString255Ptr);
  288.      $0003:(textIsC1OutputPtr:ResultBuf255Ptr);
  289.      $0004:(textIsTB2Ptr:Ptr);
  290.      $0005:(textIsRawPtr:Ptr);
  291.  
  292.      $0008:(textIsPStringHandle:String255Hndl);
  293.      $0009:(textIsCStringHandle:CStringHndl);
  294.      $000A:(textIsC1InputHandle:GSString255Hndl);
  295.      $000B:(textIsC1OutputHandle:ResultBuf255Hndl);
  296.      $000C:(textIsTB2Handle:Handle);
  297.      $000D:(textIsRawHandle:Handle);
  298.  
  299.      $0010:(textIsPStringResource: ResID);
  300.      $0011:(textIsCStringResource: ResID);
  301.      $0012:(textIsC1InputResource: ResID);
  302.      $0013:(textIsC1OutputResource: ResID);
  303.      $0014:(textIsTB2Resource: ResID);
  304.      $0015:(textIsRawResource: ResID);
  305.  
  306.      $0018:(textIsPStringNewH:String255HndlPtr);
  307.      $0019:(textIsCStringNewH:CStringHndlPtr);
  308.      $001A:(textIsC1InputNewH:GSString255HndlPtr);
  309.      $001B:(textIsC1OutputNewH:ResultBuf255HndlPtr);
  310.      $001C:(textIsTB2NewH:HandlePtr);
  311.      $001D:(textIsRawNewH:HandlePtr);
  312. END;
  313.  
  314. TEStyleRef = RECORD CASE INTEGER OF
  315.      $0000:(styleIsPtr:TEFormatPtr);
  316.      $0001:(styleIsHandle:TEFormatHndl);
  317.      $0002:(styleIsResource:ResID);
  318.      $0003:(styleIsNewH:^TEFormatHndl);
  319. END;
  320.  
  321. TEColorRef = RECORD CASE INTEGER OF
  322.      $0000:(colorIsPtr: TEColorTablePtr);
  323.      $0004:(colorIsHandle: TEColorTableHndl);
  324.      $0008:(colorIsResource: ResID);
  325. END;
  326.  
  327. TEParamBlockHndl = ^TEParamBlockPtr;
  328. TEParamBlockPtr = ^TEParamBlock;
  329. TEParamBlock = RECORD
  330.     pCount : Integer;
  331.     controlID : Longint;
  332.     boundsRect : Rect;
  333.     procRef : Longint;
  334.     flags : Integer;
  335.     moreflags : Integer;
  336.     refCon : Longint;
  337.     textFlags : Longint;
  338.     indentRect : Rect;
  339.     vertBar : CtlRecHndl;
  340.     vertAmount : Integer;
  341.     horzBar : CtlRecHndl;
  342.     horzAmount : Integer;
  343.     styleRef : TEStyleRef;
  344.     textDescriptor : Integer;
  345.     textRef : TETextRef;
  346.     textLength : Longint;
  347.     maxChars : Longint;
  348.     maxLines : Longint;
  349.     maxCharsPerLine : Integer;
  350.     maxHeight : Integer;
  351.     colorRef : TEColorRef;
  352.     drawMode : Integer;
  353.     filterProcPtr : ProcPtr;
  354. END;
  355.  
  356. TEInfoRec = RECORD
  357.     charCount : Longint;
  358.     lineCount : Longint;
  359.     formatMemory : Longint;
  360.     totalMemory : Longint;
  361.     styleCount : Longint;
  362.     rulerCount : Longint;
  363. END;
  364.  
  365. TEHooks = RECORD
  366.     charFilter : ProcPtr;
  367.     wordWrap : ProcPtr;
  368.     wordBreak : ProcPtr;
  369.     drawText : ProcPtr;
  370.     eraseText : ProcPtr;
  371. END;
  372.  
  373. TEKeyRecordHndl = ^TEKeyRecordPtr;
  374. TEKeyRecordPtr = ^TEKeyRecord;
  375. TEKeyRecord = RECORD
  376.     theChar : Integer;
  377.     theModifiers : Integer;
  378.     theInputHandle : Handle;
  379.     cursorOffset : Longint;
  380.     theOpCode : Integer;
  381. END;
  382.  
  383. TERecordHndl = ^TERecordPtr;
  384. TERecordPtr = ^TERecord;
  385. TERecord = PACKED RECORD
  386.     ctrlNext : CtlRecHndl;
  387.     inPort : WindowPtr;
  388.     boundsRect : Rect;
  389.     ctrlFlag : Byte;
  390.     ctrlHilite : Byte;
  391.     lastErrorCode : Integer;
  392.     ctrlProc : ProcPtr;
  393.     ctrlAction : ProcPtr;
  394.     filterProc : ProcPtr;
  395.     ctrlRefCon : Longint;
  396.     colorRef : TEColorTablePtr;
  397.     textFlags : Longint;
  398.     textLength : Longint;
  399.     blockList : TETextList;
  400.     ctrlID : Longint;
  401.     ctrlMoreFlags : Integer;
  402.     ctrlVersion : Integer;
  403.     viewRect : Rect;
  404.     totalHeight : Longint;
  405.     lineSuper : TESuperHandle;
  406.     styleSuper : TESuperHandle;
  407.     styleList : Handle;
  408.     rulerList : Handle;
  409.     lineAtEndFlag : Boolean;
  410.     selectionStart : Longint;
  411.     selectionEnd : Longint;
  412.     selectionActive : Integer;
  413.     selectionState : Integer;
  414.     caretTime : Longint;
  415.     nullStyleActive : Boolean;
  416.     nullStyle : TEStyle;
  417.     topTextOffset : Longint;
  418.     topTextVPos : Integer;
  419.     vertScrollBar : CtlRecHndl;
  420.     vertScrollPos : Longint;
  421.     vertScrollMax : Longint;
  422.     vertScrollAmount : Integer;
  423.     horzScrollBar : CtlRecHndl;
  424.     horzScrollPos : Longint;
  425.     horzScrollMax : Longint;
  426.     horzScrollAmount : Integer;
  427.     growBoxHandle : CtlRecHndl;
  428.     maximumChars : Longint;
  429.     maximumLines : Longint;
  430.     maxCharsPerLine : Integer;
  431.     maximumHeight : Integer;
  432.     textDrawMode : Integer;
  433.     wordBreakHook : ProcPtr;
  434.     wordWrapHook : ProcPtr;
  435.     keyFilter : ProcPtr;
  436.     theFilterRect : Rect;
  437.     theBufferVPos : Integer;
  438.     theBufferHPos : Integer;
  439.     theKeyRecord : TEKeyRecord;
  440.     cachedSelcOffset : Longint;
  441.     cachedSelcVPos : Integer;
  442.     cachedSelcHPos : Integer;
  443.     mouseRect : Rect;
  444.     mouseTime : Longint;
  445.     mouseKind : Integer;
  446.     lastClick : Point;
  447.     savedHPos : Integer;
  448.     anchorPoint : Longint;
  449. END;
  450.  
  451. PROCEDURE TEActivate ( teH:TERecordHndl)  ;
  452. PROCEDURE TEBootInit   ;
  453. PROCEDURE TEClear ( teH:TERecordHndl)  ;
  454. PROCEDURE TEClick (VAR theEventPtr:EventRecord; teH:TERecordHndl)  ;
  455. PROCEDURE TECompactRecord ( teH:TERecordHndl)  ;
  456. PROCEDURE TECopy ( teH:TERecordHndl)  ;
  457. PROCEDURE TECut ( teH:TERecordHndl)  ;
  458. PROCEDURE TEDeactivate ( teH:TERecordHndl)  ;
  459. FUNCTION TEGetDefProc  : ProcPtr ;
  460. FUNCTION TEGetInternalProc  : ProcPtr ;
  461. FUNCTION  TEGetLastError ( clearFlag:Integer; teH:TERecordHndl) : Integer ;
  462. PROCEDURE TEGetRuler ( rulerDescriptor:Integer; rulerRef:TERulerRef; teH:TERecordHndl)  ;
  463. PROCEDURE TEGetSelection (VAR selStart:Longint;VAR selEnd:Longint; teH:TERecordHndl)  ;
  464. FUNCTION  TEGetSelectionStyle (VAR commonStyle:TEStyle; styleHandle:TEStyleGroupHndl; teH:TERecordHndl) : Integer ;
  465. FUNCTION  TEGetText ( bufferDesc:Integer; bufferRef:TETextRef; bufferLength:Longint; styleDesc:Integer; styleRef:TEStyleRef; teH:TERecordHndl) : Longint ;
  466. PROCEDURE TEGetTextInfo (VAR infoRec:TEInfoRec; pCount:Integer; teH:TERecordHndl)  ;
  467. PROCEDURE TEIdle ( teH:TERecordHndl)  ;
  468. PROCEDURE TEInsert ( textDesc:Integer; textRef:TETextRef; textLength:Longint; styleDesc:Integer; styleRef:TEStyleRef; teH:TERecordHndl)  ;
  469. PROCEDURE TEInsertPageBreak ( teH:TERecordHndl)  ;
  470. PROCEDURE TEKey ( theEventPtr:EventRecord; teH:TERecordHndl)  ;
  471. PROCEDURE TEKill ( teH:TERecordHndl)  ;
  472. FUNCTION  TENew ( theParms:TEParamBlock) : TERecordHndl ;
  473. PROCEDURE TEOffsetToPoint ( textOffset:Longint;VAR vertPos:Longint;VAR horzPos:Longint; teH:TERecordHndl)  ;
  474. FUNCTION  TEPaintText ( thePort:GrafPortPtr; start:Longint; destRect:rect; paintFlags:Integer; teH:TERecordHndl) : Longint ;
  475. PROCEDURE TEPaste ( teH:TERecordHndl)  ;
  476. FUNCTION  TEPointToOffset ( vertPos:Longint; horzPos:Longint; teH:TERecordHndl) : Longint ;
  477. PROCEDURE TEReplace ( textDesc:Integer; textRef:TETextRef; textLength:Longint; styleDesc:Integer; styleRef:TEStyleRef; teH:TERecordHndl)  ;
  478. PROCEDURE TEReset   ;
  479. PROCEDURE TEScroll ( scrollDescriptor:Integer; vertAmount:Longint; horzAmount:Longint; teH:TERecordHndl)  ;
  480. PROCEDURE TESetRuler ( rulerDescriptor:Integer; rulerRef:TERulerRef; teH:TERecordHndl)  ;
  481. PROCEDURE TESetSelection ( selStart:Longint; selEnd:Longint; teH:TERecordHndl)  ;
  482. PROCEDURE TESetText ( textDesc:Integer; textRef:TETextRef; textLength:Longint; styleDesc:Integer; styleRef:TEStyleRef; teH:TERecordHndl)  ;
  483. PROCEDURE TEShutDown   ;
  484. PROCEDURE TEStartUp ( userId:Integer; directPage:Integer)  ;
  485. FUNCTION TEStatus  : Integer ;
  486. PROCEDURE TEStyleChange ( flags:Integer; newStyle:TEStyle; teH:TERecordHndl)  ;
  487. PROCEDURE TEUpdate ( teH:TERecordHndl)  ;
  488. FUNCTION TEVersion  : Integer ;
  489.  
  490. IMPLEMENTATION
  491.  
  492. END.
  493.